// 获取AI模型列表
import request from "../request";
import type { ApiResponse } from "../request";
import { AIModelTagsConstant } from "../../enum";

// 更新后的模型接口
export interface AiModelResponse {
  accessCode: string; // 模型ID
  modelName: string; // 显示名称
  modeType: string; // 模型描述
  enabled: boolean; // 是否启用
  tags: number; // 标签位
}
const ALL_TAGS =
  AIModelTagsConstant.DEEP_THINKING |
  AIModelTagsConstant.TEXT_CONVERSATION |
  AIModelTagsConstant.NETWORK |
  AIModelTagsConstant.MULTI_MODAL |
  AIModelTagsConstant.IMAGE_ANALYSIS |
  AIModelTagsConstant.FILE_ANALYSIS;

export const getAiModel = async (): Promise<ApiResponse<AiModelResponse[]>> => {
  try {
    // 尝试从API获取数据
    const response = await request.get<string[]>("/ai/models");

    // 检查API返回的数据
    if (response.code === 200 && Array.isArray(response.data)) {
      // 将字符串数组转换为AiModelResponse数组
      const models: AiModelResponse[] = response.data.map((modelId) => {
        return {
          accessCode: modelId,
          modelName: modelId, // 直接使用模型ID作为显示名称
          modeType: modelId, // 直接使用模型ID作为描述
          enabled: true,
          tags: ALL_TAGS, // 假设所有模型都支持所有功能
        };
      });

      return {
        code: response.code,
        message: response.message,
        data: models,
      };
    }

    // 如果API返回数据无效，使用默认模型
    console.log("API返回数据无效，使用默认模型");
    return {
      code: 200,
      message: "使用默认模型",
      data: getDefaultModels(),
    };
  } catch (error) {
    console.error("获取模型出错，使用默认模型:", error);
    // 出错时回退到使用默认模型
    return {
      code: 200,
      message: "API请求失败，使用默认模型",
      data: getDefaultModels(),
    };
  }
};

// 获取默认模型列表
function getDefaultModels(): AiModelResponse[] {
  return [
    {
      accessCode: "lke-deepseek-r1",
      enabled: true,
      modelName: "lke-deepseek-r1",
      modeType: "lke-deepseek-r1",
      tags: ALL_TAGS,
    },
    {
      accessCode: "lke-deepseek-v3",
      enabled: true,
      modelName: "lke-deepseek-v3",
      modeType: "lke-deepseek-v3",
      tags: ALL_TAGS,
    },
    {
      accessCode: "cs-normal",
      enabled: true,
      modelName: "cs-normal",
      modeType: "cs-normal",
      tags: ALL_TAGS,
    },
  ];
}
